#!/usr/bin/env node

// 测试当前控制方式的脚本
const { changePwmPin } = require('./lib/channel');
const { promisify } = require('util');
const { exec } = require('child_process');
const execAsync = promisify(exec);

console.log("🔍 测试当前控制方式");

async function testControlMethod() {
  console.log("\n🔧 测试PWM控制方法...");
  
  try {
    // 检查系统环境
    const fs = require('fs');
    const model = fs.readFileSync('/proc/device-tree/model', 'utf8');
    const isARMArch = process.arch === 'arm' || process.arch === 'arm64';
    const isRaspberryPi = model.includes('Raspberry Pi') && isARMArch;
    
    console.log(`设备型号: ${model.trim()}`);
    console.log(`ARM架构: ${isARMArch}`);
    console.log(`是否为树莓派: ${isRaspberryPi}`);
    
    // 检查WiringPi
    try {
      const version = await execAsync('gpio -v');
      console.log(`WiringPi版本: ${version.stdout.split('\n')[0]}`);
    } catch (error) {
      console.log("WiringPi未安装或不可用");
    }
    
    // 测试GPIO引脚初始化
    console.log("\n初始化GPIO引脚...");
    await execAsync('gpio -g mode 12 out');
    await execAsync('gpio -g mode 13 out');
    console.log("✅ 引脚12和13初始化为输出模式");
    
    // 测试PWM控制
    console.log("\n测试PWM控制...");
    console.log("发送中性信号到引脚13 (电调)...");
    changePwmPin(13, 0); // 中性位置
    
    console.log("发送前进信号到引脚13 (电调)...");
    changePwmPin(13, 0.5); // 前进
    
    await new Promise(resolve => setTimeout(resolve, 1000));
    
    console.log("发送中性信号到引脚13 (电调)...");
    changePwmPin(13, 0); // 中性位置
    
    console.log("发送右转信号到引脚12 (舵机)...");
    changePwmPin(12, 0.5); // 右转
    
    await new Promise(resolve => setTimeout(resolve, 1000));
    
    console.log("发送中性信号到引脚12 (舵机)...");
    changePwmPin(12, 0); // 中性位置
    
    console.log("\n✅ PWM控制测试完成");
    
    // 总结控制方式
    console.log("\n📋 当前控制方式总结:");
    console.log("1. 使用WiringPi库进行GPIO控制");
    console.log("2. 通过gpio命令行工具生成PWM信号");
    console.log("3. 电调连接到GPIO 13");
    console.log("4. 舵机连接到GPIO 12");
    console.log("5. 使用软件PWM模拟(通过快速高低电平切换)");
    console.log("6. PWM频率: 50Hz (20ms周期)");
    console.log("7. 脉冲宽度: 1.0ms-2.0ms (对应-1到1的值)");
    
  } catch (error) {
    console.error("❌ 测试失败:", error.message);
  }
}

async function main() {
  console.log("🚀 开始测试当前控制方式");
  
  await testControlMethod();
  
  console.log("\n🎯 测试完成");
}

main();